﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область СлужебныйПрограммныйИнтерфейс

#Область Прочие

// Служебная функция для получения результатов выполнения фонового задания к сервису облачной подписи.
// Дополнительно контролирует статус обновления маркера доступа, 
// а также убирает конфиденциальные данные см. подробнее СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя().
// 
// Возвращаемое значение:
//   см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
// 
Функция ПолучитьРезультатВыполненияФоновогоЗадания(АдресРезультата, ПараметрыОперации = Неопределено) Экспорт
	
	Результат = ПолучитьИзВременногоХранилища(АдресРезультата);
	
	Если Результат = Неопределено Тогда
		Результат = СервисКриптографииDSSКлиентСервер.ОтветСервисаПоУмолчанию(Ложь);
	КонецЕсли;
	
	НастройкиПользователя = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(Результат, "НастройкиПользователя");
	
	Если НастройкиПользователя <> Неопределено Тогда
		ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
		КлючНастроек = СервисКриптографииDSSКлиентСервер.КлючНастроекПользователя(НастройкиПользователя);
		ОбновилиНастройки = СервисКриптографииDSSСлужебный.УстановитьНастройкиПользователя(КлючНастроек, НастройкиПользователя, ИсточникНастроек);
		НастройкиПользователя = СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя(НастройкиПользователя);
		Результат.Вставить("МаркерОбновлен", ОбновилиНастройки);
		Результат.Вставить("НастройкиПользователя", НастройкиПользователя);
	КонецЕсли;	
		
	Возврат Результат;
	
КонецФункции

// Служебная функция для сброса пользовательских настроек формы (размеры) в начальное положение
// Внимание, специфика работы платформы такова, что начальные настройки применяться в новом сеансе.
//
// Параметры:
//  ИмяФормы - Строка - имя формы подсистемы
//
Процедура НачальныеНастройкиФормы(ИмяФормы) Экспорт
	
	СуффиксКлючаНастроек = "НастройкиОкнаТонкогоКлиента";
	
	Если СтрНайти(ИмяФормы, ".") = 0 Тогда
		ПутьФормы = "Обработка.УправлениеПодключениемDSS.Форма." + ИмяФормы + "/НастройкиФормы";
		ПутьОкна = "Обработка.УправлениеПодключениемDSS.Форма." + ИмяФормы + СуффиксКлючаНастроек;
	Иначе
		ПутьФормы = ИмяФормы + "/НастройкиФормы";
		ПутьОкна = ИмяФормы + СуффиксКлючаНастроек;
	КонецЕсли;
	
	ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить(ПутьФормы, "", ИмяПользователя());
	ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить(ПутьОкна, "", ИмяПользователя());

КонецПроцедуры

// Получает сессионные данные пользователя по отпечатку (серийному номеру) сертификата
// см. подробнее СервисКриптографииDSS.ПолучитьНастройкиПользователяПоСертификату().
//
// Возвращаемое значение:
//   см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//
Функция ПолучитьНастройкиПользователяПоСертификату(ДанныеСертификата, ПараметрыОперации = Неопределено) Экспорт
	
	НастройкиПользователя = СервисКриптографииDSS.ПолучитьНастройкиПользователяПоСертификату(ДанныеСертификата, ПараметрыОперации);
	
	Если НастройкиПользователя <> Неопределено Тогда
		Результат = СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя(НастройкиПользователя);
	Иначе
		Результат = СервисКриптографииDSS.НастройкиПользователяПоУмолчанию();
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Вычисляет хеш двоичных данных по указанному алгоритму
//
// Параметры:
//  Данные 		- ДвоичныеДанные - данные для вычисления хеша
//  Алгоритм 	- Строка - алгоритм вычисления хеша, поддерживаются варианты предусмотренные платформой
//				см. системное перечисление ХешФункция.
//
// Возвращаемое значение:
//  Строка, Число - если строка, то это hex представление вычисленного хеша
//	
Функция ВычислитьХешДвоичныхДанных(Данные, Алгоритм) Экспорт
	
	Временный = Новый ХешированиеДанных(ХешФункция[Алгоритм]);
	Временный.Добавить(Данные);
	
	Результат = Временный.ХешСумма;
	
	Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
		Результат = ПолучитьHexСтрокуИзДвоичныхДанных(Результат);
	КонецЕсли;	
	
	Возврат Результат;
	
КонецФункции

// Анализирует состояние блока конфиденциальной информации.
// Подробное описание Обработки.УправлениеПодключениемDSS.СлужебныеДанныеОблачнойПодписи.
//
// Возвращаемое значение:
//  Структура
//
Функция СлужебныеДанныеОблачнойПодписи(ШифрованныеБлок, КлючПоиска = Неопределено) Экспорт
	
	Возврат Обработки.УправлениеПодключениемDSS.СлужебныеДанныеОблачнойПодписи(ШифрованныеБлок, КлючПоиска);
	
КонецФункции

// Формирует структура для поиска раздела в в блоке конфиденциальной информации.
// Описание подробное Обработки.УправлениеПодключениемDSS.КлючПоискаУчетнойЗаписи.
//
// Возвращаемое значение:
//  Структура
//
Функция КлючПоискаУчетнойЗаписи(ТекущаяУчетнаяЗапись, Сервер = "", Логин = "") Экспорт
	
	Возврат Обработки.УправлениеПодключениемDSS.КлючПоискаУчетнойЗаписи(ТекущаяУчетнаяЗапись, Сервер, Логин);
	
КонецФункции

// Предназначена для получения инициализированных сессионных данных учетной записи из параметров сеанса.
// По необходимости инициализирует их и убирает при возврате на клиент конфиденциальные данные.
// Подробнее СервисКриптографииDSSСлужебный.ПолучитьНастройкиПользователя().
//
// Возвращаемое значение:
//   см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//
Функция ПолучитьНастройкиПользователя(СсылкаУчетнойЗаписи = Неопределено, ПараметрыОперации = Неопределено) Экспорт
	
	ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
	НастройкиПользователя = СервисКриптографииDSSСлужебный.ПолучитьНастройкиПользователя(СсылкаУчетнойЗаписи, ИсточникНастроек);
	Если НастройкиПользователя <> Неопределено Тогда
		Результат = СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя(НастройкиПользователя);
	Иначе
		Результат = СервисКриптографииDSS.НастройкиПользователяПоУмолчанию();
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции	

#КонецОбласти

#Область АсинхронныйВызовСервисов

// Функции данной области предназначены для организации асинхронного режима работы (через фоновые задания) с сервисом DSS
// Во всех функциях формируется адрес во временном хранилище для размещения результатов работы фонового задания
// Также идет подготовка параметров для вызова фоновых заданий - упаковка в структуры, 
// которые потом в модуле СервисКриптографииDSSСлужебный распаковываются 
//
// Данные во временном хранилище:
// Для ряда функций проверяются переданные данные помещенные во временное хранилище, они извлекаются в двоичные данные.
// В модуле СервисКриптографииDSSКлиентСервер.ПодготовитьДанныеДокумента() в таком случае они снова помещаются во временное 
// хранилище.
//
// см. СервисКриптографииDSS.АутентификацияПоСертификату()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция АутентификацияПоСертификату(НастройкиПользователя, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.АутентификацияПоСертификату", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.АутентификацияПоЛогину()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция АутентификацияПоЛогину(НастройкиПользователя, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.АутентификацияПоЛогину", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.Зашифровать()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция Зашифровать(НастройкиПользователя, ДанныеДокумента, СертификатыПолучателей, ТипШифрования = "CMS", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);

	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("СертификатыПолучателей", ТрансформироватьДанныеДокумента(СертификатыПолучателей));
	ПараметрыВызова.Вставить("ТипШифрования", ТипШифрования);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.Зашифровать", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.СертификатыРасшифрования()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СертификатыРасшифрования(НастройкиПользователя, ДанныеДокумента, ТипШифрования = "CMS", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ТрансформироватьДанныеДокумента(ДанныеДокумента));
	ПараметрыВызова.Вставить("ТипШифрования", ТипШифрования);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СертификатыРасшифрования", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ХешированиеДанных()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ХешированиеДанных(НастройкиПользователя, ДанныеДокумента, АлгоритмХеширования = "GR 34.11-2012 256", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("АлгоритмХеширования", АлгоритмХеширования);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ХешированиеДанных", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.СоздатьТранзакцию()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СоздатьТранзакцию(НастройкиПользователя, ДанныеЗапроса, КодОперации, ДанныеДокумента = Неопределено, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
	
	ПараметрыВызова.Вставить("ДанныеЗапроса", ДанныеЗапроса);
	ПараметрыВызова.Вставить("КодОперации", КодОперации);
	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СоздатьТранзакцию", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.Расшифровать()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция Расшифровать(НастройкиПользователя, ДанныеДокумента, ИдентификаторСертификата, ТипШифрования = "CMS", ПинКод = "", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("ТипШифрования", ТипШифрования);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.Расшифровать", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.Подписать()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция Подписать(НастройкиПользователя, ДанныеДокумента, СвойствоПодписи, ИдентификаторСертификата, ПинКод = "", ПотоковыйРежим = Ложь, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("СвойствоПодписи", СвойствоПодписи);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПотоковыйРежим", ПотоковыйРежим);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.Подписать", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПодписатьПакет()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПодписатьПакет(НастройкиПользователя, ДанныеДокумента, СвойствоПодписи, ИдентификаторСертификата = 0, ПинКод = "", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("СвойствоПодписи", СвойствоПодписи);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПодписатьПакет", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.УсовершенствоватьПодпись()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция УсовершенствоватьПодпись(НастройкиПользователя, ДанныеПодписи, СвойствоПодписи, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеПодписи, ПараметрыОперации, ПараметрыВызова);
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ДанныеПодписи", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("СвойствоПодписи", СвойствоПодписи);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.УсовершенствоватьПодпись", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ВалидацияПинКодаСертификата()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ВалидацияПинКодаСертификата(НастройкиПользователя, ИдентификаторСертификата, Знач ПинКод = "", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ВалидацияПинКодаСертификата", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПолучитьДанныеСертификата()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьДанныеСертификата(НастройкиПользователя, ИдентификаторСертификата, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьДанныеСертификата", ПараметрыВызова);
	
КонецФункции

// - см. см. СервисКриптографииDSS.ПолучитьСвойстваСертификата()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьСвойстваСертификата(НастройкиПользователя, ИдентификаторСертификата, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьСвойстваСертификата", ПараметрыВызова);
	
КонецФункции

// -см. СервисКриптографииDSS.ПолучитьСертификатыСервиса()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ОбновитьДанныеСертификатов(НастройкиПользователя, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ОбновитьДанныеСертификатов", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.СоздатьЗапросНаСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СоздатьЗапросНаСертификат(НастройкиПользователя,
								УдостоверяющийЦентр,
								КриптоПровайдер,
								ШаблонСертификата,
								ПоляАтрибутов,
								ПинКод = "",
								ПараметрыОперации = Неопределено) Экспорт
											
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("УдостоверяющийЦентр", УдостоверяющийЦентр);
	ПараметрыВызова.Вставить("КриптоПровайдер", КриптоПровайдер);
	ПараметрыВызова.Вставить("ШаблонСертификата", ШаблонСертификата);
	ПараметрыВызова.Вставить("ПоляАтрибутов", ПоляАтрибутов);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(Неопределено, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СоздатьЗапросНаСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.СписокЗапросовНаСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СписокЗапросовНаСертификат(НастройкиПользователя,
								ПараметрыОперации = Неопределено) Экспорт
											
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СписокЗапросовНаСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.ПолучитьЗапросНаСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьЗапросНаСертификат(НастройкиПользователя,
								ИдентификаторЗапроса,
								ПараметрыОперации = Неопределено) Экспорт
											
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьЗапросНаСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.УдалитьЗапросНаСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция УдалитьЗапросНаСертификат(НастройкиПользователя,
								ИдентификаторЗапроса,
								ПараметрыОперации = Неопределено) Экспорт
											
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.УдалитьЗапросНаСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.УстановитьСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция УстановитьСертификат(НастройкиПользователя, 
								ДанныеСертификата,
								ПараметрыОперации = Неопределено) Экспорт
											
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеСертификата", ТрансформироватьДанныеДокумента(ДанныеСертификата));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.УстановитьСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.НазначитьОсновнымСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция НазначитьОсновнымСертификат(НастройкиПользователя, ИдентификаторСертификата, Установить = Истина, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("Установить", Установить);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.НазначитьОсновнымСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.СменитьПинКодСертификата()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СменитьПинКодСертификата(НастройкиПользователя, ИдентификаторСертификата, СтарыйПинКод, НовыйПинКод, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("СтарыйПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, СтарыйПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("НовыйПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, НовыйПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СменитьПинКодСертификата", ПараметрыВызова);
	
КонецФункции

// - см. см. СервисКриптографииDSS.ПроверитьСертификат()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПроверитьСертификат(НастройкиПользователя, ДанныеСертификата, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеСертификата", ТрансформироватьДанныеДокумента(ДанныеСертификата));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПроверитьСертификат", ПараметрыВызова);
	
КонецФункции

// - см. СервисКриптографииDSS.ПолучитьСведенияОПодписантах()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьСведенияОПодписантах(НастройкиПользователя, ДанныеДокумента, ТипПодписи = "CMS", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ТрансформироватьДанныеДокумента(ДанныеДокумента));
	ПараметрыВызова.Вставить("ТипПодписи", ТипПодписи);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьСведенияОПодписантах", ПараметрыВызова);
	
КонецФункции	

// - см. СервисКриптографииDSS.ПроверитьПодпись()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПроверитьПодпись(НастройкиПользователя,
					ДанныеДокумента,
					ИсходныйДокумент,
					ТипПодписи,
					СвойстваПроверки,
					Сертификат,
					ПараметрыОперации) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ТрансформироватьДанныеДокумента(ДанныеДокумента));
	ПараметрыВызова.Вставить("ТипПодписи", ТипПодписи);
	ПараметрыВызова.Вставить("СвойстваПроверки", СвойстваПроверки);
	ПараметрыВызова.Вставить("ИсходныйДокумент", ТрансформироватьДанныеДокумента(ИсходныйДокумент));
	ПараметрыВызова.Вставить("Сертификат", ТрансформироватьДанныеДокумента(Сертификат));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПроверитьПодпись", ПараметрыВызова);
	
КонецФункции					

// см. СервисКриптографииDSS.ОбновитьПолитикуПользователя()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ОбновитьПолитикуПользователя(НастройкиПользователя,
					ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ОбновитьПолитикуПользователя", ПараметрыВызова);
	
КонецФункции					

// См. СервисКриптографииDSS.ПолучитьОписаниеСервиса
Функция ПолучитьОписаниеСервиса(АдресСервера, ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("АдресСервера", АдресСервера);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьОписаниеСервиса", ПараметрыВызова);
	
КонецФункции					

// см. СервисКриптографииDSS.ВыполнитьЗапросКСервису()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ВыполнитьЗапросКСервису(ПараметрыЗапроса, ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(ПараметрыЗапроса.НастройкиПользователя, ПараметрыОперации);
	ПараметрыЗапроса.НастройкиПользователя = ТекущиеНастройки;
	
	ПараметрыВызова.Вставить("ПараметрыЗапроса", ПараметрыЗапроса);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ВыполнитьЗапросКСервису", ПараметрыВызова);
	
КонецФункции

// См. СервисКриптографииDSS.НайтиСертификат
Функция НайтиСертификат(ОписаниеСертификата, ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ОписаниеСертификата", ОписаниеСертификата);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.НайтиСертификат", ПараметрыВызова);
	
КонецФункции

// См. СервисКриптографииDSS.СостояниеУчетнойЗаписи
Функция СостояниеУчетнойЗаписи(НастройкиПользователя, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СостояниеУчетнойЗаписи", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSSКлиент.ПодготовитьТранзакцию()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПодготовитьТранзакцию(НастройкиПользователя, ПараметрыВыполнения, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	Если ПараметрыВыполнения.Свойство("ДанныеДокумента") Тогда
		ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ПараметрыВыполнения.ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
		ПараметрыВыполнения.ДанныеДокумента = ПодготовленныеДанные;
	КонецЕсли;
	
	Если ПараметрыВыполнения.Свойство("ПинКод") Тогда
		ПараметрыВыполнения.ПинКод = ПроверитьПинКодСертификата(ПараметрыВыполнения.Сертификат, ПараметрыВыполнения.ПинКод, ТекущиеНастройки);
	КонецЕсли;
	
	Если ПараметрыВыполнения.Свойство("ПарольПользователя") Тогда
		ПараметрыВыполнения.ПарольПользователя = ПроверитьКонфиденциальноеЗначение(ПараметрыВыполнения.ПарольПользователя, Неопределено);
	КонецЕсли;
	
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыВыполнения", ПараметрыВыполнения);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПодготовитьТранзакцию", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПолучитьЗаписиАудита()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьЗаписиАудита(НастройкиПользователя, Фильтры, НачальнаяПозиция = Неопределено, КонечнаяПозиция = Неопределено, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("Фильтры", Фильтры);
	ПараметрыВызова.Вставить("НачальнаяПозиция", НачальнаяПозиция);
	ПараметрыВызова.Вставить("КонечнаяПозиция", КонечнаяПозиция);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьЗаписиАудита", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ЗагрузитьДокумент()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ЗагрузитьДокумент(НастройкиПользователя, ДанныеДокумента, ПараметрыДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ДанныеДокумента);
	ПараметрыВызова.Вставить("ПараметрыДокумента", ПараметрыДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ЗагрузитьДокумент", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ЗагрузитьПакетДокументов()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ЗагрузитьПакетДокументов(НастройкиПользователя, ПараметрыДокументов, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ПараметрыДокументов", ПараметрыДокументов);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ЗагрузитьПакетДокументов", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ИнформацияОДокументеПоИдентификатору()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ИнформацияОДокументеПоИдентификатору(НастройкиПользователя, ИдентификаторДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ИнформацияОДокументеПоИдентификатору", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ИнформацияОДокументеПоХешу()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ИнформацияОДокументеПоХешу(НастройкиПользователя, ХешДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ХешДокумента", ХешДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ИнформацияОДокументеПоХешу", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПолучитьОбработанныйДокумент()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьОбработанныйДокумент(НастройкиПользователя, ИдентификаторДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьОбработанныйДокумент", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ИзменитьИнформациюОДокументе()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ИзменитьИнформациюОДокументе(НастройкиПользователя, ИдентификаторДокумента, ПараметрыДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("ПараметрыДокумента", ПараметрыДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ИзменитьИнформациюОДокументе", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПривязатьДокумент()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПривязатьДокумент(НастройкиПользователя, ИдентификаторДокумента, ИдентификаторРодительскогоДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("ИдентификаторРодительскогоДокумента", ИдентификаторРодительскогоДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПривязатьДокумент", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.СконвертироватьДокумент()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СконвертироватьДокумент(НастройкиПользователя, ИдентификаторДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СконвертироватьДокумент", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПолучитьИнформациюДокументаКонвертации()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьИнформациюДокументаКонвертации(НастройкиПользователя, ИдентификаторДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьИнформациюДокументаКонвертации", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.УдалитьДокумент()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция УдалитьДокумент(НастройкиПользователя, ИдентификаторДокумента, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторДокумента", ИдентификаторДокумента);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.УдалитьДокумент", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.СоздатьЗакрытыйКлюч()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СоздатьЗакрытыйКлюч(НастройкиПользователя, ИдентификаторАлгоритмаКлюча, ПараметрыКлюча, ПинКод, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторАлгоритмаКлюча", ИдентификаторАлгоритмаКлюча);
	ПараметрыВызова.Вставить("ПараметрыКлюча", ПараметрыКлюча);
	ПараметрыВызова.Вставить("ПинКод", ПинКод);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СоздатьЗакрытыйКлюч", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.УстановитьПараметрЗакрытогоКлюча()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция УстановитьПараметрЗакрытогоКлюча(НастройкиПользователя, ИдентификаторСертификата, ИмяПараметра, ЗначениеПараметра, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("ИмяПараметра", ИмяПараметра);
	ПараметрыВызова.Вставить("ЗначениеПараметра", ЗначениеПараметра);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.УстановитьПараметрЗакрытогоКлюча", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПолучитьПараметрЗакрытогоКлюча()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьПараметрЗакрытогоКлюча(НастройкиПользователя, ИдентификаторСертификата, ИмяПараметра, ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("ИмяПараметра", ИмяПараметра);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьПараметрЗакрытогоКлюча", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПодписатьАсинхронно() - переделаны входящие параметры
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПодписатьАсинхронно(НастройкиПользователя, ДанныеДокументов, СвойствоПодписи, ИдентификаторСертификата, ПинКод, ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокументов, ПараметрыОперации, ПараметрыВызова);
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ДанныеДокументов", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("СвойствоПодписи", СвойствоПодписи);
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПодписатьАсинхронно", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ПолучитьОбработанныеДокументы()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ПолучитьОбработанныеДокументы(НастройкиПользователя, ИдентификаторыДокументов, ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторыДокументов", ИдентификаторыДокументов);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ПолучитьОбработанныеДокументы", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.ЗашифроватьАсинхронно()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ЗашифроватьАсинхронно(НастройкиПользователя, ДанныеДокумента, СертификатыПолучателей, ТипШифрования = "CMS", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);

	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("СертификатыПолучателей", ТрансформироватьДанныеДокумента(СертификатыПолучателей));
	ПараметрыВызова.Вставить("ТипШифрования", ТипШифрования);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.ЗашифроватьАсинхронно", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.РасшифроватьАсинхронно()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция РасшифроватьАсинхронно(НастройкиПользователя, ДанныеДокумента, ИдентификаторСертификата, ТипШифрования = "CMS", ПинКод = "", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПодготовленныеДанные = ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации, ПараметрыВызова);
	ТекущиеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ПодготовленныеДанные);
	ПараметрыВызова.Вставить("ТипШифрования", ТипШифрования);
	ПараметрыВызова.Вставить("ПинКод", ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки));
	ПараметрыВызова.Вставить("ИдентификаторСертификата", ИдентификаторСертификата);
	ПараметрыВызова.Вставить("НастройкиПользователя", ТекущиеНастройки);
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.РасшифроватьАсинхронно", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.СертификатыРасшифрованияАсинхронно()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СертификатыРасшифрованияАсинхронно(НастройкиПользователя, ДанныеДокумента, ТипШифрования = "CMS", ПараметрыОперации = Неопределено) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ДанныеДокумента", ТрансформироватьДанныеДокумента(ДанныеДокумента));
	ПараметрыВызова.Вставить("ТипШифрования", ТипШифрования);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СертификатыРасшифрованияАсинхронно", ПараметрыВызова);
	
КонецФункции

// см. СервисКриптографииDSS.СведенияОбОперации()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция СведенияОбОперации(НастройкиПользователя, ИдентификаторОперации, ПараметрыОперации = Неопределено) Экспорт
					
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова.Вставить("ИдентификаторОперации", ИдентификаторОперации);
	ПараметрыВызова.Вставить("НастройкиПользователя", ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации));
	ПараметрыВызова.Вставить("ПараметрыОперации", ПараметрыОперации);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("СервисКриптографииDSSСлужебный.СведенияОбОперации", ПараметрыВызова);
	
КонецФункции

// См. Обработки.УправлениеПодключениемDSS.ОбменССерверомАктивироватьУчетнуюЗапись()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ОбменССерверомАктивироватьУчетнуюЗапись(ИдентификаторСубъекта, ПодписьПароля, ДанныеПодписи) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыВызова = Новый Структура;
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("ПодписьПароля", ПодписьПароля);
	ПараметрыВызова.Вставить("ДанныеПодписи", ДанныеПодписи);
	ПараметрыВызова.Вставить("ИдентификаторСубъекта", ИдентификаторСубъекта);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("Обработки.УправлениеПодключениемDSS.ОбменССерверомАктивироватьУчетнуюЗапись", ПараметрыВызова);
	
КонецФункции

// См. Обработки.УправлениеПодключениемDSS.ОбменССерверомАктивироватьУчетнуюЗапись()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ОбменССерверомАктивироватьКлючПриложенияУчетнойЗаписи(ИдентификаторСубъекта, ПодписьПриложения) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("ПодписьПриложения", ПодписьПриложения);
	ПараметрыВызова.Вставить("ИдентификаторСубъекта", ИдентификаторСубъекта);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("Обработки.УправлениеПодключениемDSS.ОбменССерверомАктивироватьКлючПриложенияУчетнойЗаписи", ПараметрыВызова);
	
КонецФункции

// Служебный вызов серверной функции, см. Обработки.УправлениеПодключениемDSS.ОбменССерверомОтправитьКодАктивацииКлюча()
//
// Возвращаемое значение:
//   см. ДлительныеОперации.ВыполнитьВФоне
//
Функция ОбменССерверомОтправитьКодАктивацииКлюча(ИдентификаторСубъекта, ПодписьКодаАктивацииПриложения) Экспорт
	
	АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	
	ПараметрыВызова = Новый Структура;
	ПараметрыВызова.Вставить("ПодписьКодаАктивацииПриложения", ПодписьКодаАктивацииПриложения);
	ПараметрыВызова.Вставить("ИдентификаторСубъекта", ИдентификаторСубъекта);
	ПараметрыВызова.Вставить("АдресРезультата", АдресРезультата);
	
	Возврат СервисКриптографииDSSСлужебный.ВыполнитьВФоне("Обработки.УправлениеПодключениемDSS.ОбменССерверомОтправитьКодАктивацииКлюча", ПараметрыВызова);
	
КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ПоследующийВызовСерверныхФункций

// Проверяет необходимость обновления сессионные данных учетной записи, 
// также при возврате обнуляются конфиденциальные данные.
// 
// Параметры:
//  НастройкиПользователя	- см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//  НовыеНастройки			- см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//  ПараметрыОперации		- Структура, ФиксированнаяСтруктура - позволяет указать дополнительные параметры операции.
//
Процедура ОбновитьНастройкиПользователя(НастройкиПользователя, НовыеНастройки, ПараметрыОперации = Неопределено) Экспорт
	
	Если НастройкиПользователя.Ссылка = НовыеНастройки.Ссылка Тогда
		
		ПодготовленныеНастройки = ПодготовитьНастройкиПользователя(НовыеНастройки, ПараметрыОперации);
		ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
		КлючНастроек = СервисКриптографииDSSКлиентСервер.КлючНастроекПользователя(ПодготовленныеНастройки);
		СервисКриптографииDSSСлужебный.УстановитьНастройкиПользователя(КлючНастроек, ПодготовленныеНастройки, ИсточникНастроек);
		НастройкиПользователя = СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя(ПодготовленныеНастройки);
		
	КонецЕсли;	
	
КонецПроцедуры

// Получает параметры из адрес редиректа
// см. СервисКриптографииDSSСлужебный.ПолучитьПараметрыИзОтвета
//
Функция ПолучитьПараметрыИзОтвета(ДанныеСтраницы) Экспорт
	
	Возврат СервисКриптографииDSSСлужебный.ПолучитьПараметрыИзОтвета(ДанныеСтраницы);
	
КонецФункции

// Осуществляет подбор настроек авторизованной учетной записи
// Может потребоваться для осуществления операций не требующих строгой конфиденциальности, таких как:
// - проверка подписи
// - проверка сертификата
// - хеширование
// - шифрование данных.
//
// Параметры:
//  Отбор 				- Неопределено, Соответствие - если передана структура, то поля содержат отборы.
//  ПараметрыОперации	- Неопределено
//                   	- Структура
//
// Возвращаемое значение:
//  Структура - Массив из СправочникСсылка.УчетныеЗаписиDSS
//
Функция ПодобратьНастройкиПользователя(Знач Отбор = Неопределено, ПараметрыОперации = Неопределено) Экспорт
	
	Результат = Новый Массив;
	ТаблицаАккаунтов = СервисКриптографииDSSСлужебный.ПолучитьДанныеАккаунтов();
	ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
	ОбщиеНастройки = СервисКриптографииDSSСлужебный.ПолучитьКонтейнерНастроек(ИсточникНастроек);
	
	Если Отбор = Неопределено Тогда
		Отбор = Новый Соответствие;
	КонецЕсли;	
	
	МассивОтобранных = Новый Массив;
	
	Если ТаблицаАккаунтов.Количество() = 1 Тогда
		МассивОтобранных.Добавить(ТаблицаАккаунтов[0].Ссылка);
		
	Иначе
		ПервыйАвторизованный = Неопределено;
		ПервыйОтобранный = Неопределено;
		
		Для каждого СтрокаТаблицы Из ТаблицаАккаунтов Цикл
			СтрокаНастройки = ОбщиеНастройки.Пользователи[СтрокаТаблицы.Ссылка];
			Если СтрокаНастройки = Неопределено Тогда
				СтрокаНастройки = ПолучитьНастройкиПользователя(СтрокаТаблицы.Ссылка, ПараметрыОперации);
			КонецЕсли;

			Авторизован = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(СтрокаНастройки, "Политика.Заполнено", Ложь);
			
			Если Авторизован Тогда
				ПервыйАвторизованный = СтрокаТаблицы.Ссылка;
			КонецЕсли;
			
			НашлиПользователя = 0;
			Для каждого СтрокаОтбора Из Отбор Цикл
				ЗначениеПоля = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(СтрокаНастройки, СтрокаОтбора.Ключ);
				Если СтрокаОтбора.Значение = "Заполнено" Тогда
					Если ЗначениеЗаполнено(ЗначениеПоля) Тогда
						НашлиПользователя = НашлиПользователя + 1;
					КонецЕсли;
				ИначеЕсли ЗначениеПоля = СтрокаОтбора.Значение Тогда
					НашлиПользователя = НашлиПользователя + 1;
				КонецЕсли;	
			КонецЦикла;
			
			Если НашлиПользователя = Отбор.Количество() Тогда
				Если Авторизован Тогда
					ПервыйОтобранный = СтрокаТаблицы.Ссылка;
				КонецЕсли;
				МассивОтобранных.Добавить(СтрокаТаблицы.Ссылка);
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
	Если ПервыйОтобранный <> Неопределено Тогда
		Результат.Добавить(ПервыйОтобранный);
	ИначеЕсли МассивОтобранных.Количество() = 1 Тогда
		Результат.Добавить(МассивОтобранных[0]);
	ИначеЕсли МассивОтобранных.Количество() > 1 Тогда
		Результат = МассивОтобранных;
	ИначеЕсли Отбор.Количество() = 0 И ПервыйАвторизованный <> Неопределено Тогда
		Результат.Добавить(ПервыйАвторизованный);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Инициализирует параметры сеанса учетной записи.
// Востребована в случае смены аутентификационных данных: логин, пароль и прочее.
//
// Параметры:
//  НастройкиПользователя	- СправочникСсылка.УчетныеЗаписиDSS
//                       	- Структура - см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//  ПараметрыОперации - Структура, ФиксированнаяСтруктура - позволяет указать дополнительные параметры операции.
// 
// Возвращаемое значение:
//   см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//
Функция СброситьПараметрыСеансаУчетнойЗаписи(НастройкиПользователя, ПараметрыОперации = Неопределено) Экспорт
	
	Если ТипЗнч(НастройкиПользователя) <> Тип("Структура") Тогда
		КлючНастроек = НастройкиПользователя;
	Иначе
		КлючНастроек = СервисКриптографииDSSКлиентСервер.КлючНастроекПользователя(НастройкиПользователя);
	КонецЕсли;
	
	ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
	СервисКриптографииDSSСлужебный.ОбновитьНастройкиПользователя(КлючНастроек, ИсточникНастроек);
	Результат = СервисКриптографииDSSСлужебный.ПолучитьНастройкиПользователя(КлючНастроек, ИсточникНастроек);
	Результат = СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя(Результат);
	
	Возврат Результат;
	
КонецФункции

// Формирует описание ошибки на основе ключевого слова
// см. СервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки()
//
// Возвращаемое значение:
//  Строка
//
Функция ПолучитьОписаниеОшибки(РезультатОперации, ТипОшибки, ТекстОшибки = "") Экспорт
	
	Возврат СервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки(РезультатОперации, ТипОшибки, ТекстОшибки);
	
КонецФункции

// Возвращает список доступных способов вторичной авторизации - для подтверждения операций
// см. СервисКриптографииDSS.СписокВторичнойАвторизации()
//
// Возвращаемое значение:
//  Массив из ПеречислениеСсылка.СпособыАвторизацииDSS
//
Функция СписокВторичнойАвторизации(СервисПодписи = Неопределено) Экспорт
	
	Если СервисПодписи = Неопределено Тогда
		Результат = СервисКриптографииDSS.СписокВторичнойАвторизации(Справочники.ЭкземплярыСервераDSS.ПустаяСсылка());
	Иначе	
		Результат = СервисКриптографииDSS.СписокВторичнойАвторизации(СервисПодписи);
	КонецЕсли;	
	
	Возврат Результат;
	
КонецФункции	

// Получает список учетных записей для пакетной работы с сообщениями
// см. СервисКриптографииDSSСлужебный.ПолучитьУчетныеЗаписи()
//
// Возвращаемое значение:
//   см. СервисКриптографииDSS.ПолучитьВсеУчетныеЗаписи
//
Функция ПолучитьУчетныеЗаписи() Экспорт
	
	Возврат СервисКриптографииDSSСлужебный.ПолучитьУчетныеЗаписи();
	
КонецФункции

// Получает идентификатор сертификата по отпечатку
// см. СервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатаПоСерийномуНомеру().
//
// Возвращаемое значение:
//  Структура - см. подробнее СервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатаПоСерийномуНомеру.
//
Функция ПолучитьСертификатПоСерийномуНомеру(СерийныйНомер) Экспорт
	
	ДанныеСертификата = СервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатаПоСерийномуНомеру(СерийныйНомер);
	
	Возврат ДанныеСертификата;
	
КонецФункции

// Получает список удостоверяющих центров из сессионных данных пользователя
// см. СервисКриптографииDSS.ПолучитьИнформациюУдостоверяющихЦентров()
//
// Возвращаемое значение:
//  Структура - см. подробнее СервисКриптографииDSS.ПолучитьИнформациюУдостоверяющихЦентров.
//
Функция ПолучитьИнформациюУдостоверяющихЦентров(НастройкиПользователя, ПараметрыОперации = Неопределено) Экспорт
	
	Возврат СервисКриптографииDSS.ПолучитьИнформациюУдостоверяющихЦентров(НастройкиПользователя, ПараметрыОперации);
	
КонецФункции	

// Делает запись в журнал регистрации, обычно при возникновении ошибки
// см. СервисКриптографииDSSСлужебный.ЗаписатьОшибкуВЖурналРегистрации()
//
Процедура ЗаписатьОшибкуВЖурналРегистрации(ИнформацияОбОшибке, ПараметрыВызова = Неопределено, РегистрироватьОшибку = Истина) Экспорт
	
	СервисКриптографииDSSСлужебный.ЗаписатьОшибкуВЖурналРегистрации(ИнформацияОбОшибке, ПараметрыВызова, РегистрироватьОшибку);
	
КонецПроцедуры
	
// Служит для сохранения конфиденциальных данных в безопасном хранилище
// см. СервисКриптографииDSSСлужебный.СохранитьЗакрытыеДанные()
//
Процедура СохранитьЗакрытыеДанные(ИдентификаторПользователя, Значение, ИмяЗначения = Неопределено) Экспорт
	
	СервисКриптографииDSSСлужебный.СохранитьЗакрытыеДанные(ИдентификаторПользователя, Значение, ИмяЗначения);
	
КонецПроцедуры	

// Служит для сохранения конфиденциальных данных сертификатов в безопасном хранилище
// см. СервисКриптографииDSSСлужебный.СохранитьПинКодСертификата()
//
Процедура СохранитьПинКодСертификата(ИдентификаторПользователя, ОтпечатокСертификата, ПинКод) Экспорт
	
	СервисКриптографииDSSСлужебный.СохранитьПинКодСертификата(ИдентификаторПользователя, ОтпечатокСертификата, ПинКод);
	
КонецПроцедуры	

// Проверяет результат авторизации пользователя с ожидаемой учетной записью
// см. СервисКриптографииDSS.ПроверитьМаркерДоступа()
//
// Возвращаемое значение:
//  Структура - см. подробнее СервисКриптографииDSSКлиентСервер.ОтветСервисаПоУмолчанию()
//
Функция ПроверитьМаркерДоступа(НастройкиПользователя, РезультатЗапроса, ПараметрыОперации = Неопределено) Экспорт
	
	ПодготовленныеНастройки = ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации);
	Результат = СервисКриптографииDSS.ПроверитьМаркерДоступа(ПодготовленныеНастройки, РезультатЗапроса, ПараметрыОперации);
	ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
	КлючНастроек = СервисКриптографииDSSКлиентСервер.КлючНастроекПользователя(ПодготовленныеНастройки);
	СервисКриптографииDSSСлужебный.УстановитьНастройкиПользователя(КлючНастроек, ПодготовленныеНастройки, ИсточникНастроек);
	
	НастройкиПользователя = СервисКриптографииDSSСлужебный.ЗакрытьНастройкиПользователя(ПодготовленныеНастройки);
		
	Возврат Результат;
	
КонецФункции

// Формирует структуру для цикла подтверждения криптографической операции
// см. СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию
//
// Параметры:
//  НастройкиПользователя - Структура
//
// Возвращаемое значение:
//  Структура - СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию();
//
Функция ДанныеВторичнойАвторизацииПоУмолчанию(НастройкиПользователя = Неопределено) Экспорт
	
	Возврат СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию(НастройкиПользователя);	
КонецФункции

// Функция-обертка, служит для получения значения полей объекта. 
// см ОбщегоНазначения.ЗначенияРеквизитовОбъекта.
//
// Возвращаемое значение:
//   см. ОбщегоНазначения.ЗначенияРеквизитовОбъекта
//
Функция ЗначенияРеквизитовОбъекта(СсылкаОбъекта, Реквизиты) Экспорт
	
	Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаОбъекта, Реквизиты);
	Возврат Результат;
	
КонецФункции	

// Получает все используемые учетные записи облачной подписи. 
// Подробнее в СервисКриптографииDSSСлужебный.ПолучитьВсеУчетныеЗаписи.
//
// Возвращаемое значение:
//  Массив - элементы из ссылок справочника УчетныеЗаписиDSS
//
Функция ПолучитьВсеУчетныеЗаписи() Экспорт
	
	Результат = Новый Массив;
	ВсеЗаписи = СервисКриптографииDSSСлужебный.ПолучитьВсеУчетныеЗаписи();
	
	Для Каждого СтрокаТаблицы Из ВсеЗаписи Цикл
		Результат.Добавить(СтрокаТаблицы.Ссылка);
	КонецЦикла;	
	
	Возврат Результат;
	
КонецФункции

// Формирует настройки учетной записи по логину (без ссылки на справочник).
// 
// Возвращаемое значение:
//   см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//
Функция ДополнитьНастройкиПользователя(СерверПодписи, ЛогинУчетнойЗаписи) Экспорт
	
	Если ТипЗнч(СерверПодписи) = СервисКриптографииDSSКлиентСервер.ПолучитьТипСервераОблачнойПодписи() Тогда
		ВсеСерверы = СервисКриптографииDSSСлужебный.ПолучитьВсеСерверы(Новый Структура("Ссылка", СерверПодписи));
		Если ВсеСерверы.Количество() > 0 Тогда
			ДанныеСервера = Новый Структура();
			ТекущаяСтрока = ВсеСерверы[0];
			Для Каждого СтрокаКолонки Из ВсеСерверы.Колонки Цикл
				ДанныеСервера.Вставить(СтрокаКолонки.Имя, ТекущаяСтрока[СтрокаКолонки.Имя]);
			КонецЦикла;	
		КонецЕсли;
	Иначе
		ДанныеСервера = СерверПодписи;
	КонецЕсли;
	
	Результат = СервисКриптографииDSS.НастройкиПользователяПоУмолчанию();
	СервисКриптографииDSSСлужебный.ДополнитьНастройкиПользователя(Результат, ДанныеСервера, ЛогинУчетнойЗаписи);
	
	Возврат	Результат;
	
КонецФункции	

// Создает элементы справочников или обновляет их, по представленным данным
// см. Обработки.УправлениеПодключениемDSS.СоздатьУчетнуюЗаписьОблачнойПодписи
//
Функция СоздатьУчетнуюЗаписьОблачнойПодписи(ДанныеСервера, ЛогинУчетнойЗаписи) Экспорт 
	
	Результат = Обработки.УправлениеПодключениемDSS.СоздатьУчетнуюЗаписьОблачнойПодписи(
				ДанныеСервера, ЛогинУчетнойЗаписи, "", Истина);
				
	Возврат Результат;
	
КонецФункции

// Получает закрытое значение пароля по его идентификатору из параметров сеанса
//
// Параметры:
//  ИдентификаторПароля - Строка
//
// Возвращаемое значение:
//  Строка
//
Функция ПолучитьПарольПоИдентификатору(ИдентификаторПароля)
	
	УстановитьПривилегированныйРежим(Истина);
	ВсеДанные = СервисКриптографииDSSСлужебный.ПолучитьКонтейнерНастроек(СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(Неопределено));
	УстановитьПривилегированныйРежим(Ложь);
	
	НашлиДанные = ВсеДанные.Параметры[ИдентификаторПароля];
	Если НашлиДанные = Неопределено Тогда
		Результат = СервисКриптографииDSSКлиентСервер.ОбъектПароля("", 0);
	Иначе
		Результат = СервисКриптографииDSSКлиентСервер.ОбъектПароля(НашлиДанные, 1);
	КонецЕсли;

	Возврат Результат;
	
КонецФункции

#КонецОбласти

#Область ВспомогательныеПроцедурыИФункции

// Служит для трансформации данных документа переданных в параметрах вызова.
// Если данные документа переданы как адрес в временном хранилище, то в фоновое задание нужно передать их как двоичные данные.
// При этом если нужно вернуть результат как адрес во временном хранилище, резервируются такие адреса.
//
Функция ТрансформироватьДанныеДокумента(ДанныеДокумента, ПараметрыОперации = Неопределено, ПараметрыВызова = Неопределено)
	
	Результат = ДанныеДокумента;
	
	ЭтоТранзакция = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(ПараметрыОперации, "Транзакция", Ложь);
	ТрансформироватьРезультат = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(ПараметрыОперации, "ТрансформироватьРезультат");
	Если ТрансформироватьРезультат = Неопределено Тогда
		ТрансформироватьРезультат = Новый Структура();
		ТрансформироватьРезультат.Вставить("ТипРезультата", "Неопределено");
		ТрансформироватьРезультат.Вставить("АдресаВременногоХранилища", Новый Массив);
	КонецЕсли;	
	
	ТипРезультата = ТрансформироватьРезультат.ТипРезультата;
	МассивАдресов = Новый Массив;
	
	Если ТипЗнч(ДанныеДокумента) = Тип("Массив") Тогда
		Для Счетчик = 1 По ДанныеДокумента.Количество() Цикл
			СтрокаМассива = ДанныеДокумента[Счетчик - 1];
			ЕстьКонтент = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(СтрокаМассива, "Содержание");
			Если ЕстьКонтент <> Неопределено Тогда
				ДанныеСтроки = ЕстьКонтент;
			Иначе
				ДанныеСтроки = СтрокаМассива;
			КонецЕсли;	
			
			Если ТипРезультата = "Неопределено" Тогда
				ТипРезультата = СервисКриптографииDSSКлиентСервер.ПолучитьТипДанныхДокумента(ДанныеСтроки);
			КонецЕсли;
			
			НуженАдрес = ТипРезультата = "АдресХранилища";
			АнализДанных = ПроверитьНаВременноеХранилище(ДанныеСтроки, ЭтоТранзакция, НуженАдрес);
			
			Если ЕстьКонтент <> Неопределено Тогда
				СтрокаМассива.Содержание = АнализДанных.Результат;
			Иначе
				ДанныеДокумента[Счетчик - 1] = АнализДанных.Результат;
			КонецЕсли;	
			МассивАдресов.Добавить(АнализДанных.НовыйАдрес);
		КонецЦикла;	
		ТрансформироватьРезультат.ТипРезультата = ТипРезультата;
		
	ИначеЕсли ТипЗнч(ТипРезультата) = Тип("Массив") Тогда
		Для Счетчик = 1 По ТипРезультата.Количество() Цикл
			НуженАдрес = ТипРезультата[Счетчик - 1] = "АдресХранилища";
			АнализДанных = ПроверитьНаВременноеХранилище(Неопределено, ЭтоТранзакция, НуженАдрес);
			Результат = АнализДанных.Результат;
			МассивАдресов.Добавить(АнализДанных.НовыйАдрес);
		КонецЦикла;	
		
	Иначе
		Если ТипРезультата = "Неопределено" Тогда
			ТипРезультата = СервисКриптографииDSSКлиентСервер.ПолучитьТипДанныхДокумента(ДанныеДокумента);
			ТрансформироватьРезультат.ТипРезультата = ТипРезультата;
		КонецЕсли;	
		НуженАдрес = ТипРезультата = "АдресХранилища";
		АнализДанных = ПроверитьНаВременноеХранилище(ДанныеДокумента, ЭтоТранзакция, НуженАдрес);
		Результат = АнализДанных.Результат;
		МассивАдресов.Добавить(АнализДанных.НовыйАдрес);
		
	КонецЕсли;
	
	Если ПараметрыВызова <> Неопределено Тогда
		ТрансформироватьРезультат.Вставить("АдресаВременногоХранилища", МассивАдресов);
		ПараметрыВызова.Вставить("ТрансформироватьРезультат", ТрансформироватьРезультат);
	КонецЕсли;	
	
	Возврат Результат;
	
КонецФункции

// Служебная функция, необходима для обратной трансформации данных в случае необходимости
// см. ТрансформироватьДанныеДокумента
//
Функция ПроверитьНаВременноеХранилище(ДанныеДокумента, ЭтоТранзакция = Ложь, ПолучитьАдрес = Ложь)
	
	Результат = Новый Структура("Результат, НовыйАдрес", ДанныеДокумента, Неопределено);
	
	Если ТипЗнч(ДанныеДокумента) = Тип("Строка")
		И ЭтоАдресВременногоХранилища(ДанныеДокумента) Тогда
		Результат.НовыйАдрес = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
		Если НЕ ЭтоТранзакция Тогда
			Результат.Результат = ПолучитьИзВременногоХранилища(ДанныеДокумента);
		КонецЕсли;	
	ИначеЕсли ПолучитьАдрес Тогда
		Результат.НовыйАдрес = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ИначеЕсли ЭтоТранзакция Тогда	
		Результат.Результат = Неопределено;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Служебная функция для передачи значения пин-кода в вызовы сервиса облачной подписи.
// Если ПинКод = Неопределено, то осуществляется попытка получения данных из сессионных данных.
//
// Параметры:
//  ИдентификаторСертификата	- Строка, Число, Структура - см. СервисКриптографииDSSКлиентСервер.НайтиСертификат
//  ПинКод 						- Неопределено, Строка - значение пин-код
//  ТекущиеНастройки			- см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//
// Возвращаемое значение:
//  Строка - значение пин-код, должен быть в закрытом виде
//	
Функция ПроверитьПинКодСертификата(ИдентификаторСертификата, ПинКод, ТекущиеНастройки)
	
	Результат = ПинКод;
	ПолучитьЗначение = Ложь;
	
	Если ТипЗнч(ПинКод) = Тип("Структура") И ПинКод.Состояние = 2 Тогда
		ПолучитьЗначение = Истина;
	ИначеЕсли ТипЗнч(ПинКод) = Тип("Структура") И ПинКод.Состояние = 5 Тогда
		Результат = ПолучитьПарольПоИдентификатору(ПинКод.Значение);
		ПолучитьЗначение = Ложь;
	ИначеЕсли ПинКод = Неопределено Тогда
		ПолучитьЗначение = Истина;
	КонецЕсли;
	
	Если ПолучитьЗначение Тогда
		ОписаниеСертификата = СервисКриптографииDSSКлиентСервер.НайтиСертификат(ТекущиеНастройки, ИдентификаторСертификата);
		Результат = ОписаниеСертификата.ПинКод;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Служебная функция, для подготовки структуры сессионных данных учетной записи для передачи в фоновое задание
// Восстанавливает конфиденциальные данные, т.к. без них невозможен вызов сервиса
// Также проверяет актуальность версий сессионных данных.
//
// Параметры:
//  НастройкиПользователя	- см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//                       	- СправочникСсылка.УчетныеЗаписиDSS
//  ПараметрыОперации		- Неопределено
//                   		- Структура
//
// Возвращаемое значение:
//   см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
//	
Функция ПодготовитьНастройкиПользователя(НастройкиПользователя, ПараметрыОперации = Неопределено)
	
	ТекущиеНастройки = СервисКриптографииDSSСлужебный.СкопироватьСтруктуру(НастройкиПользователя);
	ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ПараметрыОперации);
	
	Если ТипЗнч(НастройкиПользователя) <> Тип("Структура") Тогда
		СохраненныеНастройки = СервисКриптографииDSSСлужебный.ПолучитьНастройкиПользователя(НастройкиПользователя, ИсточникНастроек);
		ТекущиеНастройки = СохраненныеНастройки;
	Иначе
		КлючНастроек = СервисКриптографииDSSКлиентСервер.КлючНастроекПользователя(НастройкиПользователя);
		СохраненныеНастройки = СервисКриптографииDSSСлужебный.ПолучитьНастройкиПользователя(КлючНастроек, ИсточникНастроек);
	КонецЕсли;	
	
	Если СохраненныеНастройки = Неопределено Тогда
		Результат = ТекущиеНастройки;
		
	ИначеЕсли ТекущиеНастройки.ВерсияНастройки < СохраненныеНастройки.ВерсияНастройки Тогда
		Результат = СохраненныеНастройки;
		
	ИначеЕсли ТекущиеНастройки.ВерсияНастройки = СохраненныеНастройки.ВерсияНастройки Тогда
		ТокенАвторизации = ТекущиеНастройки.ТокенАвторизации;
		
		ТекущиеНастройки.Пароль = ПроверитьКонфиденциальноеЗначение(ТекущиеНастройки.Пароль, СохраненныеНастройки.Пароль);
		ТекущиеНастройки.ПарольСертификата = ПроверитьКонфиденциальноеЗначение(ТекущиеНастройки.ПарольСертификата, СохраненныеНастройки.ПарольСертификата);
		ТокенАвторизации.Токен = ПроверитьКонфиденциальноеЗначение(ТокенАвторизации.Токен, СохраненныеНастройки.ТокенАвторизации.Токен, 0);
		ТокенАвторизации.ТокенОбновления = ПроверитьКонфиденциальноеЗначение(ТокенАвторизации.ТокенОбновления, СохраненныеНастройки.ТокенАвторизации.ТокенОбновления, 0);
		
		Для каждого СтрокаКлюча Из ТекущиеНастройки.Сертификаты Цикл
			НашлиСертификат = СохраненныеНастройки.Сертификаты[СтрокаКлюча.Ключ];
			Если НашлиСертификат <> Неопределено Тогда
				СтрокаКлюча.Значение.ПинКод = ПроверитьКонфиденциальноеЗначение(СтрокаКлюча.Значение.ПинКод, НашлиСертификат.ПинКод);
			КонецЕсли;	
		КонецЦикла;
		Результат = ТекущиеНастройки;
		
	Иначе
		Результат = СервисКриптографииDSS.НастройкиПользователяПоУмолчанию();
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Проверки входящих данных.
//
// Параметры:
//  ТекущееЗначение 	- Структура
//                  	- Строка
//                  	- Неопределено
//  СохраненноеЗначение - Структура
//                      - Строка
//                      - Неопределено
//  Состояние 			- Число
//
// Возвращаемое значение:
//  Структура
//	
Функция ПроверитьКонфиденциальноеЗначение(ТекущееЗначение, СохраненноеЗначение, Состояние = 1)
	
	НужноПреобразовать = ТипЗнч(СохраненноеЗначение) = Тип("Строка");
	
	Если ТипЗнч(ТекущееЗначение) = Тип("Структура") Тогда
		Результат = ТекущееЗначение;
		
		Если ТекущееЗначение.Состояние = 2 Тогда
			Результат = СохраненноеЗначение;
		ИначеЕсли ТекущееЗначение.Состояние = 5 Тогда
			Результат = ПолучитьПарольПоИдентификатору(ТекущееЗначение.Значение);
		КонецЕсли;	
		
	ИначеЕсли ТекущееЗначение = Неопределено Тогда
		Результат = СохраненноеЗначение;
		
	КонецЕсли;
	
	Если НужноПреобразовать Тогда
		Результат = СервисКриптографииDSSКлиентСервер.ОбъектПароля(Результат, Состояние);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Служебная функция, для подготовки данных документа получаемых из БД
//
// Параметры:
//  ОписаниеДанных 	- Структура:
//    * Ссылка 		- СправочникСсылка, ДокументСсылка - данные для позиционирования на элементе с данными
//    * Реквизит 	- Строка - имя реквизита с типом "ХранилищеЗначения"
//
// Возвращаемое значение:
//  - Неопределено
//  - ДвоичныеДанные
//	
Функция ПолучитьДанныеБазыПоСсылке(ОписаниеДанных) Экспорт
	
	СсылкаБД = ОписаниеДанных.Ссылка;
	ДанныеДокумента = Неопределено;
	ДанныеРеквизита = Неопределено;
	
	Если ЗначениеЗаполнено(СсылкаБД) Тогда
		Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(СсылкаБД)) Тогда
			ДанныеРеквизита = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаБД, ОписаниеДанных.Реквизит);
		КонецЕсли;	
	КонецЕсли;	
	
	Если ТипЗнч(ДанныеРеквизита) = Тип("ХранилищеЗначения") Тогда
		ДанныеДокумента = ДанныеРеквизита.Получить();
	КонецЕсли;
	
	Если ТипЗнч(ДанныеДокумента) <> Тип("ДвоичныеДанные") Тогда
		ЗаписатьОшибкуВЖурналРегистрации(
			НСтр("ru = 'Объект содержит некорректные данные'"), ОписаниеДанных);
	КонецЕсли;
	
	Возврат ДанныеДокумента;
	
КонецФункции

Процедура УстановитьЗначениеПараметраСессии(ИдентификаторПараметра, ЗначениеПараметра, ИсточникНастроек = Неопределено) Экспорт

	СервисКриптографииDSSСлужебный.УстановитьЗначениеПараметраСессии(ИдентификаторПараметра, ЗначениеПараметра, ИсточникНастроек);
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти
